package _1_初级._1_1_数组;

import com.alibaba.fastjson.JSON;

import java.util.ArrayList;
import java.util.List;

public class _217_存在重复元素 {

    //与136题类似

    /**
     * 给定一个整数数组，判断是否存在重复元素。
     *
     * 如果任意一值在数组中出现至少两次，函数返回 true 。如果数组中每个元素都不相同，则返回 false 。
     *
     *
     * 示例 1:
     *
     * 输入: [1,2,3,1]
     * 输出: true
     *
     * 示例 2:
     *
     * 输入: [1,2,3,4]
     * 输出: false
     *
     * 示例 3:
     *
     * 输入: [1,1,1,3,3,4,3,2,4,2]
     * 输出: true
     *
     */

    //方法一：数据
    public static boolean containsDuplicate1(int[] nums) {

        int[] nums2 = nums;
        boolean isEq = false;

        for(int i = 0 ; i < nums.length; i++){
            for(int j = 0; j < nums2.length; j++){
                if(i == j){
                    continue;
                }
                if(nums[i] == nums2[j]){
                    isEq = true;
                }
            }
        }

        return isEq;
    }

    //方法二：List
    public static boolean containsDuplicate2(int[] nums) {

        boolean isEq = false;

        List<Integer> list = new ArrayList<>();
        for(int i = 0; i < nums.length; i++){
            if(list.contains(nums[i])){
                isEq = true;
                break;
            }else{
                list.add(nums[i]);
            }
        }

        return isEq;
    }

    //方法三：排序
    public static boolean containsDuplicate3(int[] nums) {

        int temp;
        for(int i = 0; i < nums.length; i++){
            for(int j = 0; j < nums.length - i - 1; j++){
                if(nums[j] > nums[j + 1]){
                    temp = nums[j + 1];
                    nums[j + 1] = nums[j];
                    nums[j] = temp;
                }
            }
        }

        System.out.println("排序结果：" + JSON.toJSONString(nums));

        for(int i = 0; i < nums.length - 1; i++){
            if(nums[i] == nums[i + 1]){
                return true;
            }
        }

        return false;
    }


    public static void main(String[] args) {
        int[] nums1 = new int[]{1,2,3,1};
        int[] nums2 = new int[]{1,2,3,4};
        int[] nums3 = new int[]{1,1,1,3,3,4,3,2,4,2};
        System.out.println(containsDuplicate3(nums1));
        System.out.println(containsDuplicate3(nums2));
        System.out.println(containsDuplicate3(nums3));

    }
}
